#ifndef PRUEBAS_ARCHIVO_
#define PRUEBAS_ARCHIVO_

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include "../Archivo.h"
#include "../includes.h"

void pruebaPrimerElemento()
{
//	std::stringstream stream;
//	Toolkit::Archivo a = Toolkit::Archivo(20, "", "ejemplo.txt", Toolkit::TEXTO, stream);
//	
//	stream.str("primero");
//	a.guardarDato(stream, 0);
//	
//	stream.str("");
//	a.recuperarDato(0, stream);
//	std::cout << stream.str() << std::endl;
	
}


void prueba1()
{
	std::stringstream stream;
	stream.str("|esta es parte de la real metadata del universo|");
	Toolkit::Archivo a = Toolkit::Archivo(20, "midir/pruebas/", "ejemplo", Toolkit::TEXTO, stream);
	
	stream.str("primero");
	a.guardarDato(stream);
	
	stream.str("segundo");
	a.guardarDato(stream);
	
	stream.str("tercero");
	a.guardarDato(stream);
	
	stream.str("");
	a.recuperarDato(2, stream);
	std::cout << stream.str() << std::endl;
		
	a.eliminarDato(1, stream);
	
	stream.str("reemplazo2");
	a.guardarDato(stream);	
	
	stream.str("al final debe ir");
	a.guardarDato(stream);
	
	a.eliminarDato(0, stream);	
}

void prueba2() 
{
	std::stringstream stream;
	Toolkit::Archivo a = Toolkit::Archivo("midir/pruebas/", "ejemplo", Toolkit::TEXTO);
	
	std::cout << a.cantElementos()<< std::endl;
	
	a.recuperarDato(2, stream);
	std::cout << stream.str() << std::endl;
	
	stream.str("Reemplazo primero");
	a.guardarDato(stream);
	
	stream.str("Este va al final");
	a.guardarDato(stream);
	
	stream.str("");
	a.leerMetaData(stream);
	std::cout << "en otro orden de cosas, esta es la metadata: " <<
		stream.str() << std::endl;
		
	stream.str("*esta es parte de la mala maladata del universo*");
	a.actualizarMetadata(stream);
	
	stream.str("");
	a.leerMetaData(stream);
	std::cout << "en otro orden de cosas, esta es la metadata: " <<
		stream.str() << std::endl;
	
}
 
 void prueba3() {
 	std::stringstream stream;
 	std::string meta = "nevermind this metadata loca";
 	stream.write(meta.c_str(), meta.size());
 	float metafloat = 125.02;
 	stream.write((char*)&metafloat, sizeof(float));
	Toolkit::Archivo a = Toolkit::Archivo(8, "midir/pruebas/", "ejemplo", Toolkit::BINARIO, stream);
	
	float value, leido;
	
	stream.str("");
	value = 0.1;
	stream.write((char*) &(value), sizeof(float));
	a.guardarDato(stream);
	
	stream.str("");
	value = 20.2;
	stream.write((char*) &(value), sizeof(float));
	a.guardarDato(stream);
	
	stream.str("");
	value = 3333.3;
	stream.write((char*) &(value), sizeof(float));
	a.guardarDato(stream);
	
	stream.str("");
	a.recuperarDato(1, stream);	
	cout << "el tamano de lo que recupera es: " << stream.str().size() << endl;
	
	stream.read((char*)&leido, sizeof(float));
	std::cout << "loq ue leyo fue: " << leido << std::endl;
	
	a.eliminarDato(1, stream);
	stream.read((char*)&leido, sizeof(float));
	std::cout << "loq ue elimino fue: " << leido << std::endl;
	
	stream.str("");
	value = 6666.1;
	stream.write((char*) &(value), sizeof(float));		
	a.guardarDato(stream);
	
	stream.str("");
	a.recuperarDato(1, stream);	
	stream.read((char*)&leido, sizeof(float));
	std::cout << "lo q ue leyo fue: " << leido << std::endl;
	
	stream.str("");
	value = 44444.4;
	stream.write((char*) &(value), sizeof(float));
	a.guardarDato(stream);
	
	stream.str("");
	value = 55555.5;
	stream.write((char*) &(value), sizeof(float));
	a.guardarDato(stream);
	
	a.eliminarDato(0, stream);
	a.eliminarDato(2, stream);	
	
 }

void prueba4() {
	Toolkit::Archivo a = Toolkit::Archivo("midir/pruebas/", "ejemplo", Toolkit::BINARIO);
	std::cout << a.getTamano() << std::endl;
	
	std::stringstream stream;
	float leido, valor;
	
	a.recuperarDato(3, stream);
	stream.read((char*) &leido, sizeof(float));
	std::cout << "recuperado: " << leido << std::endl;
	std::cout << "elem: " << a.cantElementos() << std::endl;
	
	valor = 9999.99;
	stream.str("");
	stream.write((char*)&valor, sizeof(float));
	a.guardarDato(stream);
	std::cout << "elem: " << a.cantElementos() << std::endl;
	
	valor = 797979.55;
	stream.str("");
	stream.write((char*)&valor, sizeof(float));
	a.guardarDato(stream);
	std::cout << "elem: " << a.cantElementos() << std::endl;
	
	a.recuperarDato(0, stream);
	stream.read((char*) &leido, sizeof(float));
	std::cout << "recuperado: " << leido << std::endl;
	
	a.recuperarDato(2, stream);
	stream.read((char*) &leido, sizeof(float));
	std::cout << "recuperado: " << leido << std::endl;
		
	valor = 0.0255;
	stream.str("");
	stream.write((char*)&valor, sizeof(float));
	a.guardarDato(stream);
	std::cout << "elem: " << a.cantElementos() << std::endl;	
	
	std::stringstream metastream;
	std::string meta;
	char metaChar[28];
	float metafloat;
	a.leerMetaData(metastream);
	
	metastream.read((char*)&metaChar, 28);
	meta.append(metaChar, 28);	
	
	metastream.read((char*)&metafloat, sizeof(float));
	std::cout << "leyo: " << meta <<", y tambien el float: " << metafloat << std::endl;
}

void pruebaTamanoUnidadPrimera() {
    std::stringstream stream;
    Toolkit::Archivo a = Toolkit::Archivo(20, "midir/pruebas/", "ejemplo", Toolkit::TEXTO, stream, 25);

    stream.str("primeroMasLargouuuussssss");
    a.guardarDato(stream);

    stream.str("segundo");
    a.guardarDato(stream);

    stream.str("tercero");
    a.guardarDato(stream);

    stream.str("");
    a.recuperarDato(2, stream);
    std::cout << stream.str() << std::endl;

    a.eliminarDato(1, stream);
    cout << stream.str() << endl;

    stream.str("");
    a.recuperarDato(0, stream);
    std::cout << stream.str() << std::endl;

    stream.str("reemplazo2");
    a.guardarDato(stream);

    stream.str("al final debe ir");
    a.guardarDato(stream);

    a.eliminarDato(0, stream);



}

#endif
